一、結構
func name(InputParameter-list) (OutPutResult-list) {
function body
}
InputParameter: 輸入的變數
OutPutResult: 輸出的變數
輸出的變數,如果只有一個,可以省略()。下面有範例。
二、特性
在Go語言中,函數是一等(first-class)公民,函數類型也是一等的數據類型。
package main
import (
"fmt"
)
func Sum(ops ...int) int {
sum := 0
for _, ops := range ops {
sum += ops
}
return sum
}
func main() {
fmt.Println(Sum())
fmt.Println(Sum(1))
fmt.Println(Sum(1,2,3))
}
https://play.golang.org/p/JQMsgZsBOr-
package main
import (
"fmt"
)
func Sum(ops ...int) (number, total int) {
sum := 0
num := 0
for _, ops := range ops {
num ++
sum += ops
}
return num, sum
}
func main() {
x, y := Sum()
fmt.Println(x,y)
_, y = Sum(1) //忽略第一個返回值
fmt.Println(y)
x, y = Sum(1,3,5)
fmt.Println(x, y)
}
https://play.golang.org/p/dTYzJefJNxn
package main
import (
"fmt"
"errors"
)
type operate func(x, y int) int
//輸入: 兩個int類型的變數,和一個operate類型的參數
//輸出: 一個int類型,和一個error類型的結果
func check(x int, y int, op operate) (int, error) {
if op == nil { //檢查op的參數,是不是 nil
return 0, errors.New("Invalid")
}
return op(x, y), nil
}
//Sum和operate的宣告方式一致
func Sum(a, b int) int {
return a + b
}
func main() {
x, y := 1, 2
op := Sum
result, err := check(x, y, op)
fmt.Printf("Result: %d (error: %v)\n", result, err)
result, err = check(x, y, nil)
fmt.Printf("Result: %d (error: %v)\n", result, err)
}
https://play.golang.org/p/3-xXDTb89t2
參考來源:
Go语言核心36讲-郝林
https://www.flysnow.org/2017/03/31/go-in-action-go-method.html